package cn.itcast.ssm.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import cn.itcast.ssm.controller.validation.ValidGroup1;
import cn.itcast.ssm.exception.CustomException;
import cn.itcast.ssm.po.Items;
import cn.itcast.ssm.po.ItemsCustom;
import cn.itcast.ssm.po.ItemsQueryVo;
import cn.itcast.ssm.service.ItemsService;

/**
 * 
 * <p>
 * Title: ItemsController
 * </p>
 * <p>
 * Description:商品的controller
 * </p>
 * <p>
 * Company: www.itcast.com
 * </p>
 * 
 * @author 传智.燕青
 * @date 2015-4-13下午4:03:35
 * @version 1.0
 */
@Controller
// 为了对url进行分类管理 ，可以在这里定义根路径，最终访问url是根路径+子路径
// 比如：商品列表：/items/queryItems.action
@RequestMapping("/items")
public class ItemsController {
	
	private static Logger logger=Logger.getLogger(ItemsController.class);

	@Autowired
	private ItemsService itemsService;
	
	// 商品查询
	@RequestMapping("/queryItems")
	public ModelAndView queryItems(HttpServletRequest request,
			ItemsQueryVo itemsQueryVo) throws Exception {
		logger.debug(itemsQueryVo);
		// 测试forward后request是否可以共享
		/*itemsQueryVo=new ItemsQueryVo();
		ItemsCustom itemsCustom=new ItemsCustom();
		itemsCustom.setName("包");
		itemsQueryVo.setItemsCustom(itemsCustom);*/
		

		// 调用service查找 数据库，查询商品列表
		List<ItemsCustom> itemsList = itemsService.findItemsList(itemsQueryVo);
		logger.debug(itemsList);

		// 返回ModelAndView
		ModelAndView modelAndView = new ModelAndView();
		// 相当 于request的setAttribut，在jsp页面中通过itemsList取数据
		modelAndView.addObject("itemsList", itemsList);

		// 指定视图
		// 下边的路径，如果在视图解析器中配置jsp路径的前缀和jsp路径的后缀，修改为
		// modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
		// 上边的路径配置可以不在程序中指定jsp路径的前缀和jsp路径的后缀
		modelAndView.setViewName("/items/itemsList");

		return modelAndView;

	}
		
	// 商品信息修改页面显示
	// @RequestMapping("/editItems")
	// 限制http请求方法，可以post和get
	// @RequestMapping(value="/editItems",method={RequestMethod.POST,RequestMethod.GET})
	// public ModelAndView editItems()throws Exception {
	//
	// //调用service根据商品id查询商品信息
	// ItemsCustom itemsCustom = itemsService.findItemsById(1);
	//
	// // 返回ModelAndView
	// ModelAndView modelAndView = new ModelAndView();
	//
	// //将商品信息放到model
	// modelAndView.addObject("itemsCustom", itemsCustom);
	//
	// //商品修改页面
	// modelAndView.setViewName("items/editItems");
	//
	// return modelAndView;
	// }

	@RequestMapping(value = "/editItems", method = { RequestMethod.POST,
			RequestMethod.GET })
	// @RequestParam里边指定request传入参数名称和形参进行绑定。
	// 通过required属性指定参数是否必须要传入
	// 通过defaultValue可以设置默认值，如果id参数没有传入，将默认值和形参绑定。
	public String editItems(Model model,
			//@RequestParam(value = "id", required = true) Integer items_id)
			Integer items_id)
			throws Exception {

		// 调用service根据商品id查询商品信息
		ItemsCustom itemsCustom = itemsService.findItemsById(items_id);
		//判断商品是否为空，根据id没有查询到商品，抛出异常，提示用户商品信息不存 在
			if(itemsCustom == null){
			throw new CustomException("修改的商品信息不存在!");
			}

		// 通过形参中的model将model数据传到页面
		// 相当于modelAndView.addObject方法
		model.addAttribute("items", itemsCustom);

		return "items/editItems";
	}
	
	//商品修改提交
	@RequestMapping("/editItemsSubmit")
	public String editItemSubmit(@Validated @ModelAttribute("items")ItemsCustom items,BindingResult result,
			Model model)throws Exception{
		
		System.out.println(items);
		if (result.hasErrors()) {
			List<ObjectError> errors = result.getAllErrors();
			for(ObjectError objectError:errors){
				System.out.println(objectError.getCode());
				System.out.println(objectError.getDefaultMessage());
			}
			model.addAttribute("errors", result);
			return "items/editItems";
		}
		itemsService.updateItems(items);
		
		return "success";
	}

}
